/*
 * Copyright 2010 Assert Developments
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * 	http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package be.ad.coffeebreak.web;

import be.ad.coffeebreak.services.SecurityService;
import be.ad.coffeebreak.web.commands.AccountCommand;
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;
import com.google.inject.factory.Factory;
import com.google.inject.factory.NamedFactory;

import javax.naming.Context;
import javax.naming.InitialContext;

import static com.google.inject.jndi.JndiIntegration.fromJndi;

/**
 * The guice web module.
 *
 * @author Stefan Bangels
 */
public class WebModule extends AbstractModule {

    /**
     * Configures our web bindings.
     */
    @Override
    public void configure() {
        // JNDI Context
        bind(Context.class).to(InitialContext.class);

        // Services
        bind(SecurityService.class).toProvider(fromJndi(SecurityService.class, SecurityService.JNDI_LOCAL));

        // Commands
        bind(AccountCommand.class);

        // Command Factory
        Factory<Command> commandFactory = new NamedFactory<Command>();
        commandFactory.map("/settings/account").to(AccountCommand.class);

        bind(new TypeLiteral<Factory<Command>>() {
        }).toInstance(commandFactory);
    }

}
